import {Command} from '../constant';
import {IMainReducer} from '../types';
import {Action} from 'typings';
import produce from 'immer';
import * as immerUtil from '@/redux/immer-util';

const INITIAL_STATE: IMainReducer = {
  isReady: false,
  isLoading: false,

  // 相应值
  response: {
    loadAppellation: '',
    loadCard: '',
    loadUserInfo: '',
    loadGameTimes: '',
    synthetic: '', // 合成结果
    play: '',
    loadGameDailyTimes: '',
    claimRewards: '',
  },
  codeMessage: '',
  status: {
    loadingAppellation: false,
    loadingCard: false,
    loadingUserInfo: false,
    loadingGameTimes: false,
    syntheticing: false,
    playing: false,
    loadingGameDailyTimes: false,
    claimingRewards: false,
  },

  appellationItems: [], // 奖品列表
  cardItems: [], // 卡片列表
  syntheticResult: {}, // 合成结果
  userInfo: {
    gameAvailableTimes: 0, // 游戏次数
  },

  gameInfo: {},
};

export default function main(state = INITIAL_STATE, action: Action): IMainReducer {
  const {type, payload} = action;

  return produce<IMainReducer>(state, (draftState) => {
    switch (type) {
      //通用改变数据
      case Command.commonChange:
        return immerUtil.commonChange(draftState, {...payload, key: 'main'});

      //初始化
      case Command.init:
        draftState.isReady = true;
        for (let propKey in payload.main) {
          draftState[propKey] = payload.main[propKey];
        }
        return draftState;

      //重置
      case Command.clean:
        for (let propKey in INITIAL_STATE) {
          draftState[propKey] = INITIAL_STATE[propKey];
        }
        return draftState;
    }
  });
}
